//#include <stdio.h>
//#include <string.h>
//
//int main()
//{
//	char str[] = "memmove can be very useful......";
//	memmove(str + 20, str + 15, 10);
//	puts(str);
//	return 0;
//}

//#include <iostream>
//#include <algorithm>
//#include <vector>
//using namespace std;
//class Solution {
//public:
//    int singleNumber(vector<int>& nums) {
//        sort(nums.begin(), nums.end());
//        int i = 0;
//        int result = 0;
//        while (i < nums.size())
//        {
//            if (i + 1 != nums.size() && nums[i] == nums[i + 1])
//            {
//                i += 3;
//            }
//            else
//            {
//                result = nums[i];
//                break;
//            }
//        }
//        return result;
//    }
//};
//int main()
//{
//    vector<int> nums = { 2,2,3,2 };
//    cout << Solution().singleNumber(nums);
//    return 0;
//}

//class Solution {
//public:
//    vector<int> singleNumber(vector<int>& nums) {
//        sort(nums.begin(), nums.end());
//        int i = 0, j = 0;
//        vector<int> v = { 0,0 };
//        while (j != 2 && i < nums.size())
//        {
//            if (i + 1 != nums.size() && nums[i] == nums[i + 1])
//            {
//                i += 2;
//            }
//            else
//            {
//                v[j++] = nums[i];
//                i++;
//            }
//        }
//        return v;
//    }
//};

//#include <iostream>
//#include <sys/types.h>
//#include <unistd.h>
//using namespace std;
//int main()
//{
//	cout << "PID: " << getpid() << endl;
//	int ret = fork();
//	cout << "ret = fork(): " << ret << endl;
//	sleep(1);
//	return 0;
//}

//#include <iostream>
//#include <sys/types.h>
//#include <unistd.h>
//using namespace std;
//int main()
//{
//    cout << "PID: " << getpid() << endl;
//    int ret = fork();
//    if (ret == 0)
//    {
//        cout << "I am Child: PID " << getpid() << "  PPID: " << getppid() << endl;
//    }
//    else
//    {
//        cout << "I am father: PID " << getpid() << "  PPID: " << getppid() << endl;
//    }
//    sleep(1);
//    return 0;
//}

//#include <iostream>
//#include <queue>
//#include <vector>
//using namespace std;
//vector<int> n(50, 0);
//vector<int> m(50, 0);
//struct node
//{
//    int data;
//    node* leftchild;
//    node* rightchild;
//};
//node* Reset(int a, int b, int c, int d) {
//    int i = 0, cur = m[a], t = 0;
//    if (a > b)
//        return NULL;
//    node* root = new node;
//    root->data = cur;
//    for (i = c; i <= d; i++) {
//        if (cur == n[i])
//            break;
//    }
//    t = i - c;
//    root->leftchild = Reset(a + 1, a + t, c, i - 1);
//    root->rightchild = Reset(a + t + 1, b, i + 1, d);
//    return root;
//}
//void Travel(node* root)
//{
//    if (!root || (root->leftchild == NULL && root->rightchild == NULL))
//        return;
//    else
//    {
//        node* t = root->leftchild;
//        root->leftchild = root->rightchild;
//        root->rightchild = t;
//        Travel(root->leftchild);
//        Travel(root->rightchild);
//    }
//}
//int main()
//{
//    int x = 0, p = 0, pp = 0, a = 0;
//    queue<node*> q;
//    cin >> x;
//    for (int i = 0; i < x; i++)
//    {
//        if (!p)
//            cin >> n[i];
//        if (i == x - 1)
//            p = 1;
//        if (p)
//        {
//            if (!pp)
//            {
//                i = 0;
//                pp = 1;
//            }
//            cin >> m[i];
//        }
//    }
//    node* T = Reset(0, x - 1, 0, x - 1);
//    Travel(T);
//    q.push(T);
//    node* tmp;
//    while (!q.empty())
//    {
//        tmp = q.front();
//        q.pop();
//        if (a)
//            cout << " " << tmp->data;
//        else
//        {
//            cout << tmp->data;
//            a = 1;
//        }
//        if (tmp->leftchild)
//            q.push(tmp->leftchild);
//        if (tmp->rightchild)
//            q.push(tmp->rightchild);
//    }
//    return 0;
//}